/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.jws.WebParam;
import javax.ejb.Stateless;
import javax.enterprise.inject.Produces;
import javax.jws.WebMethod;
import javax.ws.rs.GET;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

/**
 *
 * @author Rob
 */

@WebService(serviceName = "GameWorldWS")
@Stateless()            
public class GameWorldWS {

    @EJB
    private GestoreUtenteBeanLocal gestoreUtente;
    @EJB
    private GestoreArticoloBeanLocal gestoreArticolo;
    @EJB
    private GestoreRecensioniBeanLocal gestoreRecensione;
    @EJB
    private GestoreNotiziaBeanLocal gestoreNotizia;
    
    /**
     * Effettua il login
     * @param user String che rappresenta l'username dell'utente
     * @param pwd String che rappresenta la password
     * @return true se viene effettuato il login, false se l'utente non e' presente nel Database o i parametri inseriti non sono corretti
     */
    @WebMethod(operationName = "login")
    public String login(@WebParam(name = "user")String user,@WebParam(name = "password")String pwd) throws NoSuchAlgorithmException {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(pwd.getBytes());
        pwd= String.format("%032x",new BigInteger(1,m.digest()));
        if(gestoreUtente.login(user, pwd, null)!=null){
            return "true";
        }
        return "false";
    }
    /**
     * Cerca tutti gli articoli nuovi del Database
     *
     * @return un ogetto in formato JSON che contiene una lista degli articoli nuovi presenti nel Database,  altrimenti contiene una lista vuota 
     */
    @WebMethod(operationName = "articoli")
    public String getArticoli(){
        JSONObject articoliOb = new JSONObject();
        JSONArray artArray = new JSONArray();
        List<ArticoloNuovo> articoli = gestoreArticolo.cercaArticoliNuovi();
        for(ArticoloNuovo an:articoli){
            artArray.add(an.getNome());
        }
        articoliOb.put("articoli",artArray);
        return articoliOb.toJSONString();
    }
    /**
     * Cerca tutte le notizie del Database
     *
     * @return un ogetto in formato JSON che contiene una lista delle notizie presenti nel Database,  altrimenti contiene una lista vuota 
     */
    @WebMethod(operationName = "notizie")
    public String getNotizie(){
        JSONObject notizieOb = new JSONObject();
        JSONArray notArray = new JSONArray();
        try{
            List<Notizia> notizie = gestoreNotizia.visualizzaNotizie();
            for(Notizia n:notizie){
                notArray.add(n.getTitolo());
            }
            notizieOb.put("notizie",notArray);
        }catch(Exception e){}
        
        return notizieOb.toJSONString();
        
    }
    /**
     * Cerca tutte le RecensioneInterne del Database
     *
     * @return un ogetto in formato JSON che contiene una lista delle RecensioneInterne presenti nel Database,  altrimenti contiene una lista vuota 
     */
    @WebMethod(operationName = "recensioni")
    public String getRecensioni(){
        
        JSONObject recensioniOb = new JSONObject();
        JSONArray recArray = new JSONArray();
        try{
            List<RecensioneInterna> recensioni = gestoreRecensione.visualizzaRecensioniInterne();
            for(RecensioneInterna r:recensioni){
                recArray.add(r.getTitolo());
            }
            recensioniOb.put("recensioni",recArray);
        }catch(Exception e){}
        
        return recensioniOb.toJSONString();
        
    }
}
